
### 项目六 红外接收原理及应用

**项目介绍：**

![image146](../media/425d132d1cefa3c9f575214f83668a8b.jpeg)

红外遥控在日常生活中随处可见，它被用来控制各种家电，如电视、音响、录影机和卫星信号接收器。红外遥控是由红外发射和红外接收系统组成的，也就是一个红外遥控器和红外接收模块和一个能解码的单片机组成的。 

![image147](../media/7091d9c01d85306fc81b6324fa7b68f4.png)

红外发射的遥控器发射的38K红外载波信号是由遥控器里的编码芯片对其进行编码。它是以一段引导码，用户码，数据码，数据反码组成，利用脉冲的时间间隔来区别是0还是1信号(高电平低电平之比约为1:1时被认为是信号0)，而编码就是由这些0、1信号组成。同一个遥控器的用户码是不变的，用数据吗不同来分辨遥控器按的键不同。当按下遥控器按键时，遥控器发送出红外载波信号，红外接收器接收到信号时程序对载波信号进行解码，通过数据码的不同来判断按下的是哪个键。单片机由接收到的01信号进行解码，由此判断遥控器按下的是什么键。

红外接收我们用的是一个红外接收模块，主要由红外接收头组成，它是集接收、放大、解调一体的器件，它内部IC就已经完成了解调，能够完成从红外线接收到输出与TTL电平信号兼容的所有工作，输出的就是数字信号。他适用于红外线遥控和红外线数据传输。接收器做成的红外接收模块只有三个引脚，信号线，VCC，GND。与arduino和其他单片机连接通信非常方便。

**红外接收的参数：**

下图为红外接收模块的实物图和电路图

![image148](../media/9dcb924eb37101aa05b6f21d317fbc3b.png)

![image149](../media/17b787d350e8882a03f0c31eeee3c9f2.png)

工作电压：3.3-5V（DC）

接口：3PIN接口

输出信号：数字信号

接收角度：90度

频率：38khz

接收距离：10米

**项目组件：**

| UNO R3开发板\*1                                         | L298P 电机驱动扩展板 V1\*1                              | LED白发红模块\*1                                        | 红外接收传感器\*1                                       | JMP-1 17键红外遥控\*1                                   |
|---------------------------------------------------------|---------------------------------------------------------|---------------------------------------------------------|---------------------------------------------------------|---------------------------------------------------------|
| ![image150](../media/67417bd98f12bffd0352f76063e5abbd.png) | ![image151](../media/3dca1bdd1d1420c1d12b16cbf52fee00.png) | ![image152](../media/31fb938502d3d519813c391569d6a3f3.png) | ![image153](../media/66d07761485afcf3205a64d86b17f082.png) | ![image154](../media/d60ce0046d88f529b628e85d1210778d.png) |
| USB线\*1                                                | 3Pin 双母头杜邦线\*1                                    | XH2.54-3Pin+杜邦母双\*1                                 | 18650双节电池盒（18650电池*2 （电池自配））*1           |                                                         |
| ![image155](../media/2adb48888136bedc4d6b37d47a47b292.jpg) | ![image156](../media/07752ebfc8e8af62f1b86c4a725ea284.jpg) | ![image157](../media/61437329d2cd93dc1815e829f639cca6.png) | ![image158](../media/c5bf59a8e5cdded95c02334369ab6fdd.png) |                                                         |

**接线图：**

**⚠️特别注意：坦克智能车已经组装好了，这里不需要把传感器模块和其他的都拆下来又重新组装和接线，这里再次提供接线图，是为了方便您编写代码。但是，LED灯是需要另外连接上去的！**

接线注意：由于红外接收传感器输入的数字信号，将红外接收传感器模块的“-”、“+”和S引脚分别用导线连接到keyes传感器扩展板G（GND）、V（VCC）、D3，模拟口在数字口不够的情况下，模拟口也可以当数字口使用，模拟口A0相当于数字口14，A1相当于数字口15，以此类推。

![image159](../media/04d50472225547d18c96649f981eb2e1.png)

**项目代码：**

**认识代码块**

① 这个代码块，表示当启动ESP32这块开发板时，将运行代码。

![image160](../media/img-20250609173755.png)

② 设置串口。

![image161](../media/img-20250609175555.png)

设置串口波特率，一般波特率设置为`9600`或`115200`。

![image162](../media/img-20250609175618.png)

串口输出数据，从串行端口输出数据，分换行与不换行和HEX三种方式。

![image163](../media/img-20250609175645.png)

③ 这是一些有关红外遥控和红外接收的代码块

![image164](../media/img-20250610090727.png)

初始化红外接收引脚和其他

![image165](../media/img-20250610091324.png)

接收红外遥控数据（按键值）

![image166](../media/img-20250610091447.png)

读取红外接收数据（按键值）

![image167](../media/img-20250610091539.png)

不断地刷新红外接收数据。

![image168](../media/img-20250610091618.png)

④
这是简单的条件判断语句，如果![image169](../media/b24-1.png)里的表达式为真，则执行
“那么” 块内的代码。

![image170](../media/img-20250610090858.png)

⑤ 循环语句，顾名思义就是重复做一件事。

![image171](../media/img-20250609173827.png)

⑥ 将程序的执行暂停一段时间，也就是延时。单位是秒。

![image172](../media/img-20250609174003.png)

**组合代码块**

（**特别提醒：在上传程序代码前，需要把蓝牙模块取下，否则代码会上传失败。需要上传代码成功后，再连接蓝牙模块。**）

![image173](../media/img-20250610091250.png)

**项目结果：**

上传好测试代码，在串口监视器窗口单击
![image174](../media/img-20250610081124.png)
，设置波特率为9600，拿出遥控器，对准红外接收传感器发送信号，即可看相应按键的键值，如果按键时间过长，容易出现乱码，出现
FFFFFFFF，请忽略。

![image175](../media/img-20250610090442.png)

我们通过测试得出的数值，做了一个遥控器按键值表，方便以后使用。

![image176](../media/e7946515345fdf65e1b3d58893f9a207.png)

**项目拓展：**

我们刚刚解码了红外遥控器的按键值，那我们能不能用测出的按键值来做一些控制呢，如果控制一个LED灯的亮和灭。我们来试一下，在9脚接上一个LED灯模块。红外接收器的脚位不变,当有遥控器的按键按下时,接在数字引脚9上的发光LED就会点亮，再按一下按键，led熄灭，接线图如下：

![image177](../media/3e1b8f89ced30ab39050a9693b615f8f.png)

实验代码：

（**特别提醒：在上传程序代码前，需要把蓝牙模块取下，否则代码会上传失败。需要上传代码成功后，再连接蓝牙模块。**）

![image178](../media/img-20250610092656.png)

上传代码带开发板,当遥控器按下OK按键时,LED就会亮，再按一下LED就会灭,同时电脑的串口会出现按键的命令编码.

**代码说明：**

![image179](../media/img-20250610092832.png)

如果红外接收器接收到红外遥控器的按键值，串口打印对应的16进制按键值。

![image180](../media/img-20250610093016.png)

如果按下”OK”按键，红外接收器接收到”OK”按键值，LED点亮；否则如果，再次按下”OK”按键，红外接收器再次接收到”OK”按键值，LED熄灭。